import nProgress from 'nprogress'
import 'nprogress/nprogress.css'
import router from './router'
import store from './store'

// 前置守卫- 路由跳转之前会进入
const whileList = ['/login', '/404']
// to 到哪里去
// from 从哪里来
// next-必须执行的函数-不执行页面就会卡住 pending fullfiled rejected
// next() 放过通行 login => dashboard => 顺利通行
// next(false) 终止跳转 => login => dashboard => 留在login
// next(地址) 转发地址 next("/test") login => dashboard => 跳到test
// 不论什么场景下 next必须执行 否则就会页面空白
router.beforeEach(async(to, from, next) => {
  nProgress.start()
  if (store.getters.token) {
    // 存在token
    if (to.path === '/login') {
      // 跳转到主页
      // next（地址）并没有执行后置守卫
      next('/') // 中转到主页
      nProgress.done()
    } else {
      // 这里获取用户资料 不是每次都获取
      // 当前没有用户资料的时候获取 => Vuex(全局) => 有没有用户资料
      if (!store.getters.userId) {
        // 获取用户资料
        await store.dispatch('user/getUserInfo')
      }
      next() // 放行
    }
  } else {
    if (whileList.includes(to.path)) {
      next()
    } else {
      // 中转到登录页
      next('/login')
      nProgress.done()
    }
  }
  next()
})

// 后置守卫-路由跳转完成进入
router.afterEach(() => {
  nProgress.done() // next() 关闭进度条
})

